﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.Operador.Presenter;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;
using Sinacor.Infra.UI.Common;
using PSE.Framework.UI.Resources;

namespace Sinacor.UI.Bovespa.Operador.View.SmartClient
{
    /// <summary>
    /// Interaction logic for CadastroPreferencias.xaml
    /// </summary>
    public partial class CadastroPreferencias : SinacorWindow, ICadastroPreferenciasOperador
    {
        #region Construtor
        public CadastroPreferencias()
        {
            // Este deve ser o primeiro método do contrutor da View
            InitializeComponent();

            // Inicialize a presenter no construtor
            this.CadastroPreferenciasOperador = new CadastroPreferenciasOperador(this);

            // Configure a presenter no DataContext da janela (para facilitar os bindings)
            this.DataContext = this.CadastroPreferenciasOperador;
        }
        #endregion

        #region Propriedades
        /// <summary>
        /// Property com a presenter da view
        /// </summary>
        public CadastroPreferenciasOperador CadastroPreferenciasOperador { get; set; }
        #endregion

        #region Eventos
        private void CadastroPreferencias_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            this.ShowUserWaitingProcess();

            // Esse evento deve ser utilizado para chamar o método Inicializar da presenter
            this.CadastroPreferenciasOperador.Inicializar();

            this.HideUserWaitingProcess();
        }
        private void BtnCancelar_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            if (SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Operador.Message.ConfirmaDescarte"), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes)
            {
                this.ShowUserWaitingProcess();
                this.CadastroPreferenciasOperador.Inicializar();
                this.HideUserWaitingProcess();
            }
        }

        private void BtnSalvar_Click(object sender, RoutedEventArgs e)
        {
            this.VerificarAlteracoes();
            this.ClearServiceErrors();
            if (SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.ConfirmarAlteracaoDados"), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes)
            {
                this.ShowUserWaitingProcess();
                this.CadastroPreferenciasOperador.Salvar();
                this.CadastroPreferenciasOperador.Inicializar();
                this.HideUserWaitingProcess();
            }
            else
            {
                this.ShowUserWaitingProcess();
                this.CadastroPreferenciasOperador.Inicializar();
                this.HideUserWaitingProcess();
            }
        }
        #endregion

        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            this.VerificarAlteracoes();

            if (this.CadastroPreferenciasOperador.PreferenciasOperador != null)
            {
                if (this.CadastroPreferenciasOperador.PreferenciasOperador.HasPropertyChanges)
                {
                    this.ClearServiceErrors();
                    if (SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Ordens.Message.ConfirmarAlteracaoDados"), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes)
                    {
                        this.ShowUserWaitingProcess();
                        this.CadastroPreferenciasOperador.Salvar();
                        this.HideUserWaitingProcess();
                    }
                }
            }
        }

        

        #region Métodos Privados

        private void VerificarAlteracoes()
        {
            if (this.CadastroPreferenciasOperador.PreferenciasOperador != null)
            {
                if (this.CmbBolsa.SelectedItem != null)
                {
                    if (((Model.Bolsa)this.CmbBolsa.SelectedItem).Codigo != null)
                    {
                        this.CadastroPreferenciasOperador.PreferenciasOperador.Bolsa = ((Model.Bolsa)this.CmbBolsa.SelectedItem).Codigo;
                    }
                }
                else
                {
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Bolsa = "";
                }

                if (this.RdbVista.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Mercado = Model.Enum.TipoMercado.Vista;

                if (this.RdbFracionario.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Mercado = Model.Enum.TipoMercado.Fracionario;

                if (this.RdbTermo.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Mercado = Model.Enum.TipoMercado.Termo;

                if (this.RdbOpcoes.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Mercado = Model.Enum.TipoMercado.OpcaoCompra;

                if (this.RdbAdministrada.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Ordem = Model.Enum.TipoOrdem.Administrada;

                if (this.RdbCasada.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Ordem = Model.Enum.TipoOrdem.Casada;

                if (this.RdbFinanciamento.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Ordem = Model.Enum.TipoOrdem.Financiamento;

                if (this.RdbLimitada.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Ordem = Model.Enum.TipoOrdem.Limitada;

                if (this.RdbMercado.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Ordem = Model.Enum.TipoOrdem.Mercado;

                if (this.RdbOnStop.IsChecked.Value)
                    this.CadastroPreferenciasOperador.PreferenciasOperador.Ordem = Model.Enum.TipoOrdem.OnStop;

                this.CadastroPreferenciasOperador.PreferenciasOperador.OrdemModoInsert = this.ChkModoInsert.IsChecked.Value;
                this.CadastroPreferenciasOperador.PreferenciasOperador.PopulaLoteAutomaticamenteAposInsercao = this.ChkInsercao.IsChecked.Value;
                this.CadastroPreferenciasOperador.PreferenciasOperador.PopulaLoteAutomaticamenteAposPreBoleto = this.ChkPreBoleto.IsChecked.Value;
                this.CadastroPreferenciasOperador.PreferenciasOperador.OrdenaDigitacaoDecrescente = this.ChkDecrescente.IsChecked.Value;
                this.CadastroPreferenciasOperador.PreferenciasOperador.UtilizaDataPreBoleto = this.ChkDataPreBoleto.IsChecked.Value;
            }
        }
        #endregion

        #region Métodos Interface

        public void AtualizarBolsas() {
            //Atualiza Propriedade ItemSource do ComboBox CmbBolsa
            this.CmbBolsa.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
        }

        public void AtualizarPreferencias(){
         
            switch (this.CadastroPreferenciasOperador.PreferenciasOperador.Mercado)
            {
                case Model.Enum.TipoMercado.Vista:
                    this.RdbVista.IsChecked = true;
                    break;
                case Model.Enum.TipoMercado.Fracionario:
                    this.RdbFracionario.IsChecked = true;
                    break;
                case Model.Enum.TipoMercado.Termo:
                    this.RdbTermo.IsChecked = true;
                    break;
                case Model.Enum.TipoMercado.OpcaoCompra:
                    this.RdbOpcoes.IsChecked = true;
                    break;
                default:
                    this.RdbVista.IsChecked = false;
                    this.RdbFracionario.IsChecked = false;
                    this.RdbTermo.IsChecked = false;
                    this.RdbOpcoes.IsChecked = false;
                    break;
            }

            switch (this.CadastroPreferenciasOperador.PreferenciasOperador.Ordem)
            {
                case Model.Enum.TipoOrdem.Administrada:
                    this.RdbAdministrada.IsChecked = true;
                    break;
                case Model.Enum.TipoOrdem.Casada:
                    this.RdbCasada.IsChecked = true;
                    break;
                case Model.Enum.TipoOrdem.Financiamento:
                    this.RdbFinanciamento.IsChecked = true;
                    break;
                case Model.Enum.TipoOrdem.Limitada:
                    this.RdbLimitada.IsChecked = true;
                    break;
                case Model.Enum.TipoOrdem.Mercado:
                    this.RdbMercado.IsChecked = true;
                    break;
                case Model.Enum.TipoOrdem.OnStop:
                    this.RdbOnStop.IsChecked = true;
                    break;
                default:
                    this.RdbAdministrada.IsChecked = false;
                    this.RdbCasada.IsChecked = false;
                    this.RdbFinanciamento.IsChecked = false;
                    this.RdbLimitada.IsChecked = false;
                    this.RdbMercado.IsChecked = false;
                    this.RdbOnStop.IsChecked = false;
                    break;
            }

            this.ChkModoInsert.IsChecked = this.CadastroPreferenciasOperador.PreferenciasOperador.OrdemModoInsert;
            this.ChkInsercao.IsChecked = this.CadastroPreferenciasOperador.PreferenciasOperador.PopulaLoteAutomaticamenteAposInsercao;
            this.ChkPreBoleto.IsChecked = this.CadastroPreferenciasOperador.PreferenciasOperador.PopulaLoteAutomaticamenteAposPreBoleto;
            this.ChkDecrescente.IsChecked = this.CadastroPreferenciasOperador.PreferenciasOperador.OrdenaDigitacaoDecrescente;
            this.ChkDataPreBoleto.IsChecked = this.CadastroPreferenciasOperador.PreferenciasOperador.UtilizaDataPreBoleto;

            AtualizarBolsas();

        }
        #endregion        
    
        #region ICadastroPreferenciasOperador Members


        /// <summary>
        /// Task 6418 - FGualberto.7COMm
        /// Implementação - Manutenção de Preferências do Usuário
        /// </summary>
        public void ProibirAcesso()
        {
            SinacorMessageBox.Show(this.TryFindResource("Bovespa.Operador.Message.UsuarioNaoOperador").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
            this.Close();
        }

        #endregion
    }
}
